package com.cxs.config;

import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue;

import java.util.Arrays;
import java.util.Collection;

/**
 * 执行比如 select * from t_order where order_id > ? and order_id < ?
 * 执行比如 select * from t_order where order_id between a and b
 */
public class MyRangeTableShardingAlgorithm implements RangeShardingAlgorithm<Long> {

    /**
     * 范围分表方法
     *
     * @param availableTargetNames 所有的真实表名称集合
     * @param shardingValue        上限和下限过滤条件
     * @return 需要查询的数据表名集合
     */
    @Override
    public Collection<String> doSharding(Collection<String> availableTargetNames, RangeShardingValue<Long> shardingValue) {
        // 获取上限
        Long a = shardingValue.getValueRange().upperEndpoint();//100
        // 获取下限
        Long b = shardingValue.getValueRange().lowerEndpoint();//1
        // 获取逻辑表名称
        String logicTableName = shardingValue.getLogicTableName();
        // 因为范围查询, 我们也不确定数据分布在那些表中, 所以要返回全部的表名称
        return Arrays.asList(logicTableName + "_1", logicTableName + "_2");
    }
}
